package cn.tedu.epidemic.webapi.controller;

import cn.tedu.community.commons.pojo.forum.dto.ForumAddNewDTO;
import cn.tedu.community.commons.pojo.forum.dto.ForumUpdateDTO;
import cn.tedu.community.commons.pojo.forum.vo.ForumListItemVO;
import cn.tedu.community.commons.pojo.forum.vo.ForumStandardVO;
import cn.tedu.community.commons.restful.JsonPage;
import cn.tedu.community.commons.restful.JsonResult;
import cn.tedu.epidemic.service.ForumService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.constraints.Range;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@Api(tags = "论坛控制器")
@Slf4j
@Validated
@RequestMapping("/forum")
public class ForumController {

    @Autowired
    private ForumService forumService;

    @ApiOperation("添加论坛")
    @PostMapping("/insert")
    public JsonResult<Void> insert(@Valid ForumAddNewDTO addNewDTO){
        log.debug("控制层开始处理添加论坛，数据是：{}",addNewDTO);
        forumService.insert(addNewDTO);
        return JsonResult.ok();
    }

    @ApiOperation("根据用户id和论坛id删除论坛")
    @GetMapping("/{id:[0-9]+}/delete")
    public JsonResult<Void> deleteByIdAndUserId(@PathVariable Long id) {
        log.debug("控制层开始处理根据用户id和论坛id删除论坛！论坛id是：{}", id);
        forumService.deleteByIdAndUserId(id);
        return JsonResult.ok();
    }

    @ApiOperation("根据论坛id和用户id更新论坛")
    @PostMapping("/{forumId:[0-9]+}/update")
    public JsonResult<Void> updateInfo(@PathVariable Long forumId,
                                       @Valid ForumUpdateDTO updateDTO){
        log.debug("开始执行根据论坛id和用户id更新论坛，数据是：{}",updateDTO);
        forumService.updateInfo(forumId,updateDTO);
        return JsonResult.ok();
    }

    @GetMapping("/{isLogin}/{id:[0-9]+}/select")
    @ApiOperation("查询论坛详情")
    public JsonResult<ForumStandardVO> getStandardById(@PathVariable String isLogin,
                                                       @PathVariable Long id) {
        log.debug("控制层开始处理查询论坛详情，id是：{}，判断是否已登录的用户名是：{}", id,isLogin);
        ForumStandardVO standardVO = forumService.getStandardById(isLogin,id);
        return JsonResult.ok(standardVO);
    }

    @GetMapping("/page/{page:[0-9]+}/{pageSize:[0-9]+}")
    @ApiOperation("分页查询所有论坛")
    public JsonResult<JsonPage<ForumListItemVO>> pageForum(@PathVariable Integer page,
                                                           @PathVariable Integer pageSize){
        log.debug("控制层开始处理分页查询所有论坛，page是：{}，pageSize是：{}",page,pageSize);
        JsonPage<ForumListItemVO> jsonPage = forumService.forumListByPage(page, pageSize);
        log.debug("分页查询所有论坛，数据是：{}",jsonPage);
        return JsonResult.ok(jsonPage);
    }

    @ApiOperation("根据用户id查询论坛（用于展示当前用户发布的论坛）")
    @GetMapping("/{page:[0-9]+}/{pageSize:[0-9]+}/page/user")
    public JsonResult<JsonPage<ForumListItemVO>> userPageForum(@PathVariable Integer page,
                                                               @PathVariable Integer pageSize){
        JsonPage<ForumListItemVO> jsonPage = forumService.forumListByUserId(page, pageSize);
        return JsonResult.ok(jsonPage);
    }

    @ApiOperation("根据论坛id和当前用户收藏论坛")
    @GetMapping("/{forumId:[0-9]+}/addCollect")
    public JsonResult<String> addCollect(@PathVariable Long forumId){
        log.debug("控制层开始处理添加根据论坛id和当前用户收藏论坛，论坛id是:{}",forumId);
        String addCollect = forumService.addCollect(forumId);
        return JsonResult.ok(addCollect);
    }

    @ApiOperation("查询我的收藏列表")
    @GetMapping("/{page:[0-9]+}/{pageSize:[0-9]+}/collectList")
    public JsonResult<JsonPage<ForumListItemVO>> forumListByCollect(@PathVariable Integer page,
                                                                    @PathVariable Integer pageSize){
        log.debug("开始处理查询我的收藏列表");
        JsonPage<ForumListItemVO> jsonPage = forumService.forumListByCollect(page, pageSize);
        log.debug("控制层查询我的收藏列表，数据是：{}",jsonPage);
        return JsonResult.ok(jsonPage);
    }

    @ApiOperation("根据论坛id和当前用户点赞论坛")
    @GetMapping("/{forumId:[0-9]+}/addLike")
    public JsonResult<String> addLike(@PathVariable Long forumId){
        log.debug("控制层开始处理添加根据论坛id和当前用户点赞论坛，论坛id是:{}",forumId);
        String addLike = forumService.addLike(forumId);
        return JsonResult.ok(addLike);
    }
}
